package hebClustering.clusteringAlgorithms;

import java.util.Collection;

import hebClustering.ClusterSet;
import hebClustering.vectorSpace.IVector;

/**
 * This interface describes the basic operation required by a clustering algorithm.
 * 
 * <p>
 * Cluster analysis or clustering is the assignment of a set of observations into subsets (called clusters) so that observations in the same cluster are similar in some sense. <br>
 * Clustering is a method of unsupervised learning, and a common technique for statistical data analysis used in many fields,including machine learning, data mining, pattern recognition, image analysis, information retrieval, and bioinformatics.<br><br>
 * see <a href="http://en.wikipedia.org/wiki/Cluster_analysis" target="_blank">Cluster Analysis</a> for further information.</p>
 *
 */
public interface IClusteringAlgorithm {
	
	
	/**
	 * Perform clustering on a given dataset.
	 * 
	 * <p>Given a dataset, this command returns a set of clusters which divides them.<br>
	 * The vectors which compose each cluster ought to be similar to each other<br>
	 * and each cluster ought to be as much as different as possible from the others.</p>
	 * 
	 * @param dataSet - A set of vectors.
	 * @return A cluster set which divides the given data set into clusters.
	 */
	public ClusterSet cluster(Collection<IVector> dataSet);
	
}
